

---
sidebar_label: 仅适用于 node
---



# Prisma


Langchain 支持使用 [Prisma](https://www.prisma.io/) 与 PostgreSQL 和 [`pgvector`](https://github.com/pgvector/pgvector) Postgres 扩展来增强 PostgreSQL 数据库中的现有模型的向量搜索。


## 设置


### 使用 Supabase 设置数据库实例


请参阅 [Prisma 和 Supabase 集成指南](https://supabase.com/docs/guides/integrations/prisma) 来设置 Supabase 和 Prisma 的新数据库实例。


### 安装 Prisma


```bash npm2yarn
npm install prisma

```



### 使用 `docker-compose` 设置 `pgvector` 自托管实例


`pgvector` 提供了一个预构建的 Docker 映像，可用于快速设置自托管的 Postgres 实例。


```yaml
services:

  db:

    image: ankane/pgvector

    ports:

      - 5432:5432

    volumes:

      - db:/var/lib/postgresql/data

    environment:

      - POSTGRES_PASSWORD=

      - POSTGRES_USER=

      - POSTGRES_DB=



volumes:

  db:

```

### 创建新模型
### Create a new schema



假设您还没有创建一个模型，使用类型为 `Unsupported("vector")` 的 `vector` 字段创建一个新模型:


```prisma
model Document {

  id      String                 @id @default(cuid())

  content String

  vector  Unsupported("vector")?

}

```

然后，使用 `--create-only` 创建新的迁移，以避免直接运行迁移。
Afterwards, create a new migration with `--create-only` to avoid running the migration directly.

```bash npm2yarn
```bash npm2yarn

npx prisma migrate dev --create-only

```

添加以下行到新创建的迁移，以启用 `pgvector` 扩展，如果它尚未被启用:
Add the following line to the newly created migration to enable `pgvector` extension if it hasn't been enabled yet:



```sql
CREATE EXTENSION IF NOT EXISTS vector;

```

然后运行迁移:
Run the migration afterwards:

```bash npm2yarn
```bash npm2yarn

npx prisma migrate dev

```



## 使用


:::警告
表名和列名（例如 `tableName`、`vectorColumnName`、`columns` 和 `filter` 中的字段)直接传递到 SQL 查询中，没有参数化。这些字段必须在使用前进行净化以避免 SQL 注入。
These fields must be sanitized beforehand to avoid SQL injection.

:::



import CodeBlock from "@theme/CodeBlock";

import Example from "!!raw-loader!@examples/indexes/vector_stores/prisma_vectorstore/prisma.ts";

import Schema from "!!raw-loader!@examples/indexes/vector_stores/prisma_vectorstore/prisma/schema.prisma";


<CodeBlock language="typescript">{Example}</CodeBlock>


上述示例使用以下模式:：

<CodeBlock language="prisma">{Schema}</CodeBlock>


> 如果不需要，你可以删除`namespace`。

